package com.taotao.web.service;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.http.client.ClientProtocolException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.taotao.common.service.HttpClientService;

@Service
public class IndexService {

	//注入httpclient对象
	@Autowired(required=false)
	private HttpClientService httpClientService;

	@Autowired
	private PropertiesService propertiesService;

	/**
	 *	如何得到前台系统首页需要的大广告数据？
	 *	1.调用后台系统提供的接口：http://manage.taotao.com/rest/api/content?categoryId=17&page=1&rows=6 
	 *		使用HttpClient调用接口
	 *	2.解析接口返回的json数据
	 *	3.封装成前台系统首页需要的大广告格式
	 *
	 *		[
			    {
			        "srcB": "http://image.taotao.com/images/2015/03/03/2015030304360302109345.jpg",
			        "height": 240,
			        "alt": "",
			        "width": 670,
			        "src": "http://image.taotao.com/images/2015/03/03/2015030304360302109345.jpg",
			        "widthB": 550,
			        "href": "http://sale.jd.com/act/e0FMkuDhJz35CNt.html?cpdad=1DLSUE",
			        "heightB": 240
			    },
			    ...
			]
	 * @throws IOException 
	 * @throws ClientProtocolException 
	 */

	public String queryContent() throws ClientProtocolException, IOException {

		List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
		String contenResult = null;

		//接口地址
		//String url = "http://manage.taotao.com/rest/api/content?categoryId=17&page=1&rows=6";
		String url = this.propertiesService.TT_MANAGE_BASE_URL + propertiesService.INDEXAD1_PATH;

		//1.使用HttpClient调用接口,获取json格式返回值
		String jsonData = this.httpClientService.doGet(url);

		//2.解析json格式数据

		//jackson提供的json转换工具类，主要用于将java对象转换成json格式，将json格式数据解析成java对象
		//final ObjectMapper MAPPER = new ObjectMapper();

		//解析方式一：通用的方式
		JsonNode jsonNode = PropertiesService.MAPPER.readTree(jsonData);

		//获取内容集合,并遍历获取内容
		ArrayNode arrayNode = (ArrayNode) jsonNode.get("rows");
		for (JsonNode jn : arrayNode) {
			String contentUrl = jn.get("url").asText();
			String contentPath = jn.get("pic").asText();

			//3.封装成前台系统首页需要的大广告格式
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("srcB", contentPath);
			map.put("height", 240);
			map.put("alt", jn.get("title").asText());
			map.put("width", 670);
			map.put("src", contentPath);
			map.put("widthB", 550);
			map.put("href", contentUrl);
			map.put("heightB", 240);

			resultList.add(map);
		}

		//解析方式二：必须得到和接口返回值一模一样的返回值对象，可以通过这种方式，但是一般不推荐，因为调用接口的时候不一定知道返回值类型
		//EasyUIResult jsonDate = MAPPER.readValue(jsonData, EasyUIResult.class);

		//使用jackSon工具把数据转换成String
		if (resultList != null && !resultList.isEmpty()) {
			contenResult = PropertiesService.MAPPER.writeValueAsString(resultList);
		}

		return contenResult;
	}

}
